<?php
 require_once 'toolkit/settings.php';
 require_once  SERVERPATH . '/classes/DB.php';
 require_once  SERVERPATH . '/classes/Error.php';
 
 /**
  * Die Klasse Ergebnisse stellt verschiedene Methoden zum Abrufen von
  * Spielergebnissen aus der Datenbank bereit. Außerdem enthält die Klasse
  * eine Methode zum Hinzufügen / Ändern eines Ergebnisses
  * @author Stephan Behrndt
  */
 class Ergebnisse {
 	
 	// Datenbankverbindung
 	private $mysql;
 	
 	// Variablen zum Speichern der Informationen aus der Datenbank
 	public $id;
 	public $spiel_id;
 	public $tore_heim;
 	public $tore_auswaerts;
 	
 	// Array mit Ergebnissen
 	//Array-Positionen (1. Dimension) sind die Spiel-IDs
	// Array-Positionen (2. Dimension) sind "tore_heim" und "tore_auswaerts" 
 	public $ergebnisse;
 	
 	/**
 	 * Konstruktor
 	 */
 	function __construct() {
 		// Aufbau der Verbindung zur Datenbank
 		$this->mysql 		= 	new DB();
 	}
 	
 	/**
 	 * Setzt die Klassenvariablen auf das Spielergebnis der übergebenen Spiel-ID
 	 * @param int spielID ID des Spiels
 	 * @return boolean true wenn Ergebnis in der Datenbank vorhanden
 	 * 						   false wenn Ergebnis nicht in der Datenbank vorhanden 
 	 */
 	function getErgebnis($spielId){
 		// Spiel-ID setzen
 		$this->id 	= $spielId;
 		
 		// SQL-Statement
 		$query 		= 	"SELECT id, tore_heim, tore_auswaerts
						FROM stedano_ergebnisse
						WHERE spiel_id = ?
						LIMIT 1";
		
		// PreparedStatement erzeugen
		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter einbinden
			$stmt->bind_param('i', $spielId);
			// Statement ausführen
			$stmt->execute();
			// Ergebnisse zu Variablen zuweisen
			$stmt->bind_result(		$this->id, 
									$this->tore_heim, 
									$this->tore_auswaerts);

			// Ergebnis prüfen									 
			if($stmt->fetch()) {
				// Datensatz vorhanden
				// Statement schließen
				$stmt->close();
				return true;
			}
			else{
				// Datensatz nicht vorhanden
				// Statement schließen
				$stmt->close();
				return false;
			}
		}
		else{
			// Fehlermeldung
			new Error("Datenbankfehler<br/>Abrufen der Ergebnisse nicht möglich1", true);
		}
 	}
 	
 	/**
 	 * Setzt die Klassenvariable ergebnisse (Array) auf die Ergebnisse
 	 * eines Spieltags in einer Liga.
 	 * Array-Positionen (1. Dimension) sind die Spiel-IDs
	 * Array-Positionen (2. Dimension) sind "tore_heim" und "tore_auswaerts" 
	 * mit den entsprechenden Ergebnissen zu den SpielIDs
 	 * @param int ligaId ID der Liga
 	 * @param int spieltag Spieltag
 	 */
 	function getErgebnisPerGameDay($ligaId, $spieltag){
 		// ergebnisse ist ein Array
 		$this->ergebnisse = array();
 		
 		// SQL-Statement
 		$query 		= 	"SELECT stedano_spielplan.id, stedano_ergebnisse.tore_heim, stedano_ergebnisse.tore_auswaerts
						FROM stedano_ergebnisse, stedano_spielplan
						WHERE stedano_spielplan.id = stedano_ergebnisse.spiel_id AND stedano_spielplan.liga_id = ? AND stedano_spielplan.spieltag_nr = ?";
		
		// PreparedStatement erzeugen
		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter einbinden
			$stmt->bind_param('ii', $ligaId, $spieltag);
			// Statement ausführen
			$stmt->execute();
			// Ergebnisse zu Variablen zuweisen
			$stmt->bind_result(		$this->id, 
									$this->tore_heim, 
									$this->tore_auswaerts); 
									
			// Ergebnisse durchlaufen
			while($stmt->fetch()) {
				// Array-Positionen (1. Dimension) sind die Spiel-IDs
				// Array-Positionen (2. Dimension) sind "tore_heim" und "tore_auswaerts" mit den entsprechenden Ergebnissen
				$this->ergebnisse[$this->id] = array( 'tore_heim' => $this->tore_heim,
																		'tore_auswaerts' => $this->tore_auswaerts);
					
			}
			// Statement schließen
			$stmt->close();
		}
		else{
			// Fehlermeldung
			
			new Error("Datenbankfehler - Abrufen der Ergebnisse nicht möglich2", true);
		}
 	}
 	
 	/**
 	 * Setzt die Klassenvariable ergebnisse (Array) auf die Ergebnisse in einer Liga.
 	 * Array-Positionen (1. Dimension) sind die Spiel-IDs
	 * Array-Positionen (2. Dimension) sind "tore_heim" und "tore_auswaerts" 
	 * mit den entsprechenden Ergebnissen zu den SpielIDs
 	 * @param int ligaId ID der Liga
 	 */
 	function getErgebnissePerLiga($ligaId){
 		// ergebnisse ist ein Array
 		$this->ergebnisse = array();
 		
 		// SQL-Statement
 		$query 		= 	"SELECT stedano_spielplan.id, stedano_ergebnisse.tore_heim, stedano_ergebnisse.tore_auswaerts
						FROM stedano_ergebnisse, stedano_spielplan
						WHERE stedano_spielplan.id = stedano_ergebnisse.spiel_id AND stedano_spielplan.liga_id = ?";
		
		// Prepared Statement erzeugen
		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter einbinden
			$stmt->bind_param('i', $ligaId);
			// Statement ausführen
			$stmt->execute();
			// Ergebnisse zu Variablen zuweisen
			$stmt->bind_result(		$this->id, 
									$this->tore_heim, 
									$this->tore_auswaerts);
			
			// Ergebnisse durchlaufen 
			while($stmt->fetch()) {
				// Array-Positionen (1. Dimension) sind die Spiel-IDs
				// Array-Positionen (2. Dimension) sind "tore_heim" und "tore_auswaerts" mit den entsprechenden Ergebnissen
				$this->ergebnisse[$this->id] = array( 'tore_heim' => $this->tore_heim,
																   'tore_auswaerts' => $this->tore_auswaerts);
					
			}
			// Statement schließen
			$stmt->close();
		}
		else{
			// Fehlermeldung
			new Error("Datenbankfehler<br/>Abrufen der Ergebnisse nicht möglich3", true);
		}
 	}
 	
 	/**
 	 * Setzt die Klassenvariable ergebnisse (Array) auf die Ergebnisse 
 	 * in einer Liga bis zu einem bestimmten Spieltag
 	 * Array-Positionen (1. Dimension) sind die Spiel-IDs
	 * Array-Positionen (2. Dimension) sind "tore_heim" und "tore_auswaerts" 
	 * mit den entsprechenden Ergebnissen zu den SpielIDs
 	 * @param int ligaId ID der Liga
 	 * @param int spieltag Spieltag bis zu welchem (inklusive) ermittelt werden sollen
 	 */
 	function getErgebnisUntilGameDay($ligaId, $spieltag){
 		// ergebnisse ist ein Array
 		$this->ergebnisse = array();
 		
 		// SQL-Statement
 		$query 		= 	"SELECT stedano_spielplan.id, stedano_ergebnisse.tore_heim, stedano_ergebnisse.tore_auswaerts
						FROM stedano_ergebnisse, stedano_spielplan
						WHERE stedano_spielplan.id = stedano_ergebnisse.spiel_id AND stedano_spielplan.liga_id = ? AND stedano_spielplan.spieltag_nr <= ?";
		
		// Prepared Statement erzeugen
		if($stmt = $this->mysql->conn->prepare($query)) {
			
			// Parameter einbinden
			$stmt->bind_param('ii', $ligaId, $spieltag);
			// Statement ausführen
			$stmt->execute();
			// Ergebnisse zu Variablen zuweisen
			$stmt->bind_result(		$this->id, 
									$this->tore_heim, 
									$this->tore_auswaerts);
			// Ergebnisse durchlaufen 
			while($stmt->fetch()) {
				// Array-Positionen (1. Dimension) sind die Spiel-IDs
				// Array-Positionen (2. Dimension) sind "tore_heim" und "tore_auswaerts" mit den entsprechenden Ergebnissen
				$this->ergebnisse[$this->id] = array( 'tore_heim' => $this->tore_heim,
																	'tore_auswaerts' => $this->tore_auswaerts);
					
			}
			// Statement schließen
			$stmt->close();
		}
		else{
			// Fehlermeldung
			new Error("Datenbankfehler<br/>Abrufen der Ergebnisse nicht möglich4", true);
		}
 	}
 	
 	/**
 	 * Fügt ein neues Ergebnis hinzu bzw. ändert das vorhandene Ergebnis
 	 * @param int spiel_id ID des Spiels
 	 * @param int tore_heim Tore des Heimteams
 	 * @param int tore_auswaerts Tore des Auswärtsteams
 	 */
 	function addErgebnis($spiel_id, $tore_heim, $tore_auswaerts) {
 		// Überprüfen ob Ergebnis bereits in Datenbank vorhanden
 		if($this->getErgebnis($spiel_id)){
 			// Ergebnis bereits vorhanden -> UPDATE
 			// SQL-Statement
 			$query = "UPDATE stedano_ergebnisse
 					SET tore_heim = ?, tore_auswaerts = ?
 					WHERE spiel_id = ?";
 			
 			// Prepared Statement vorbereiten		
 			if($stmt = $this->mysql->conn->prepare($query)){
	 			// Parameter einbinden
 				$stmt->bind_param('iii', $tore_heim, $tore_auswaerts, $spiel_id);
 			}
 			else{
 				// Fehler beim Erzeugen des PreparedStatements
 				new Error("Datenbankfehler<br/>Ändern des Ergebnisses nicht möglich5", true);
 			}
 		}
 		else{
 			// Ergebnis noch nicht vorhanden -> INSERT
 			// SQL-Statement
 			$query = "INSERT INTO stedano_ergebnisse (spiel_id, tore_heim, tore_auswaerts)
 					VALUES (?,?,?)";
 			// Prepared Statement erzeugen
 			if($stmt = $this->mysql->conn->prepare($query)){
 				// Parameter einbinden
 				$stmt->bind_param('iii', $spiel_id, $tore_heim, $tore_auswaerts);
 			}
 			else{
 				new Error("Datenbankfehler<br/>Ändern des Ergebnisses nicht möglich6", true);
 			}
 		}
		if(!$stmt->execute()){	 			
			new Error("Speichern des Ergebnisses nicht möglich", true);
		}
 	}
 	
 }	
 ?>
